"app";
try{

    /**
     * 配置
     */
    var deviceId = "";
    const serverIp = "10.177.13.153";               // 服务器ip
    const savePath = "/sdcard/Download/";
    var url = "http://" + serverIp;                  // 请求前置url，正式请求需要自行在后续添加
    var resourceUrl = "http://" + serverIp + "/resource";     // 资源请求前缀
    var errFilePath = savePath + "err.txt";                   // 错误信息保存的文件
    var jsDir = savePath + "js/";                       // 脚本文件存放目录
    var jsUploadDir = savePath + "js/" + "upload/";           // 上传脚本文件的目录
    var videoDir = savePath + "video/";                    // 视频路径
    var timeOut = 10;     
    var jsList = ["config.js","tiktok.js","youtube.js","facebook_reels.js","instagram_reels.js","songs.txt"];
    files.create(savePath);
    files.create(jsDir);
    files.create(jsUploadDir);
    files.create(videoDir);
    
    try{
            
        /**
         * 访问服务器，上传设备id
         */
        {
            // 查看是否有绑定信息
            
            // toastLog(initJSON)

        // 下载脚本文件；TODO：错误信息保存
        if(httpDownLoadingJS() == 0 ){
                // TODO: 请求国外账户数据，并保存
                var initJSON = httpPostData_JSON("/device/get/outer");
                toastLog("脚本文件下载成功！")
                var fileName = savePath+"账户信息.txt"
                var text = ""
                console.log(initJSON.data)
                log("count = "+initJSON.count)
                // 如果有国外账户数据
                if(initJSON.count > 0){
                    initJSON.data.forEach(item => {
                        text = text+"{\n\t账户："+item.userAccount
                                +"\n\t密码："+item.userPwd
                                +"\n\t平台："+item.platformName
                                +"\n}\n"
                    });
                    files.write(fileName, text);
                    if(files.exists(fileName)){
                        log("保存成功")
                    }else{
                        log("保存失败！")
                        // 向服务器发送错误信息
                        httpUploadErrMsg("账户信息数据保存失败！")
                    }
                }
                
            }else{
                toastLog("脚本文件下载失败！")
            }
            
        }
    }catch(e){
        files.write("/sdcard/Download/eee.txt", e);
        log("出错！！！/sdcard/Download/eee.txt")
        // app.viewFile("/sdcard/Download/eee.txt");
    }


    
}catch(e){
    httpUploadErrMsg("脚本执行错误："+appName+" => "+e)
}

/**
         * 在某个文件的开头追加写入文本
         * @param {string} filePath 文件路径
         * @param {string} text 追加写入的内容 
         */
function writeFileAppend(filePath, text){
    var file = new java.io.File(filePath);
    var reader = new java.io.BufferedReader(new java.io.FileReader(file));
    var content = "";
    var line;
    while ((line = reader.readLine()) !== null) {
        content += line + "\n"; // 读取每一行内容
    }
    reader.close();

    // 在文件开头追加文本
    content = text +"\n" + content;

    // 写入文件
    var writer = new java.io.BufferedWriter(new java.io.FileWriter(file));
    writer.write(content);
    writer.close();
}


/**
     * @description 进行post请求服务器
     * @param {string} urlPath 请求路径
     * @param {json} uploadData 必须是json格式的数据
     */
function httpPostData_JSON (urlPath, uploadData){
    // 如果uploadData不为null，则添加deviceId
    if(uploadData != null){
        uploadData.deviceId = deviceId
    }else{
        uploadData = {
            "deviceId": deviceId
        }
    }
    console.log(url+urlPath)
    var res = http.post(url+urlPath,uploadData);
    return res.body.json();
}

/**
 * @description 向服务器下载文件
 * @param {string} url 资源url 
 * @param {string} dir 保存文件夹，保存在/sdcard/download下，形式如“js/test.js”
 * @returns {flag} true or false
 */
function httpGetFile_Bytes (url, dir){
    var res = http.get(url);
    const resBytes = res.body.bytes();
    var flag = false;

    files.writeBytes(savePath + dir, resBytes);
    if (files.exists(savePath + dir)) {
        flag = true;
    } else {
        toastLog("文件下载失败。");
    }
    

    return flag;
}

/**
 * 下载config.js文件
 * @return 0为成功
 */
function httpDownLoadingJS (){
    log(jsList)
    jsList.forEach(item =>{
        if(item === "songs.txt"){
            if (files.exists(savePath + item)) {
                files.remove(savePath+item)
            }
            var resBytes = http.get(resourceUrl + "/files/" + item).body.bytes();
            files.writeBytes(savePath + item, resBytes);
        }else{
            if (files.exists(jsDir + item)) {
                files.remove(jsDir+item)
            }
            log(resourceUrl + "/files/" + item)
            var resBytes = http.get(resourceUrl + "/files/" + item).body.bytes();
            files.writeBytes(jsDir + item, resBytes);
            log("下载："+item)
            // 检查是否有id文件
            if(item === "config.js"){
                var fileList = files.listDir("/sdcard/Download/");
                var flagDeviceId = false;
                fileList.forEach(function(file) {
                    // 检查文件是否以 .id 结尾
                    if (file.endsWith('.id')) {
                        flagDeviceId = true;
                        // 获取文件名前缀
                        deviceId = file.substring(0, file.length - 3);
                        // 输出文件名前缀
                        console.log("id = " +deviceId);
                    }
                });
                if(flagDeviceId === false){
                    httpUploadErrMsg("未获取到id文件！")
                }
    
                if (files.exists(jsDir + "config.js")) {
                    writeFileAppend(jsDir+"config.js", "//追加写入：\nconst deviceId = "+"\""+deviceId+"\";")  
                } else {
                    return -1
                } 
                
            }
        }
        
        
        
    })
    
    
    return 0;
}

/**
 * 
 * @param {string} msg 错误信息
 */
function httpUploadErrMsg(msg){
    var time = formatDate(new Date())
    http.post(url + "/device/upload/errMsg",{
        "deviceId": deviceId,
        "createTime": time,
        "msg": msg
    })
    var text = "错误时间："+time
                +"\n错误信息："+msg
                +"\n\n"
    files.append(errFilePath, text)
}

/**
 * 时间格式化
 * @param {Date} date 
 * @returns 
 */
function formatDate(date) {
    var year = date.getFullYear();
    var month = (1 + date.getMonth()).toString().length === 1 ? '0' + (1 + date.getMonth()).toString() : (1 + date.getMonth()).toString(); // 月份从0开始，需要加1
    var day = date.getDate().toString().length === 1 ? '0' + date.getDate().toString() : date.getDate().toString();
    var hours = date.getHours().toString().length === 1 ? '0' + date.getHours().toString() : date.getHours().toString();
    var minutes = date.getMinutes().toString().length === 1 ? '0' + date.getMinutes().toString() : date.getMinutes().toString();
    var seconds = date.getSeconds().toString().length === 1 ? '0' + date.getSeconds().toString() : date.getSeconds().toString();

    return year + '-' + month + '-' + day + ' ' + hours + ':' + minutes + ':' + seconds;
}